import * as THREE from 'three'
// 消除three.js中对象 防止内存溢出
function disposeGroup(group) {
    // .traverse方法递归遍历group的所有后代
    group.traverse(function (obj) {
        if (obj.type == 'Mesh' || obj.type == 'Line') {
            obj.geometry.dispose();
            obj.material.dispose();
        }
    })
    if (group.children.length) {
        group.children = []; //删除所有后代模型对象
    }
}
/*射线拾取模型*/
function choose(event, sizes, camera, meshArr) {
    const Sx = event.clientX - 210; //鼠标单击位置横坐标 210是由于有侧边栏
    const Sy = event.clientY - 10; //鼠标单击位置纵坐标 10 是由于有顶部的padding
    //屏幕坐标转WebGL标准设备坐标
    const x = (Sx / sizes.width) * 2 - 1; //WebGL标准设备横坐标
    const y = -(Sy / sizes.height) * 2 + 1; //WebGL标准设备纵坐标

    // console.log(Sx, Sy);
    const raycaster = new THREE.Raycaster(); //创建一个射线投射器`Raycaster`
    //通过鼠标单击位置标准设备坐标和相机参数计算射线投射器`Raycaster`的射线属性.ray
    raycaster.setFromCamera(new THREE.Vector2(x, y), camera);
    //返回.intersectObjects()参数中射线选中的网格模型对象
    const intersects = raycaster.intersectObjects(meshArr, true);
    return intersects
}
export default {
    disposeGroup,
    choose
}